相対パスで親ディレクトリを指定するのはなぜ .. なのか
なんで..なのかわからない
「親ディレクトリに移動するには../と指定しましょう」という文脈でしか見つけられない
そう決まっているからという前提
いつ決まったのか知りたい
ディレクトリ内には少なくとも2つのエントリがあります。ディレクトリ自身へのリンクである.(ドット)とディレクトリ階層で1つ上位のディレクトリ、親ディレクトリへのリンクである..(ドットードット)です。
SUSv3では mkdir() の set-user-ID、set-group-ID、スティッキービットの処理については実装依存と明記しており、新規ディレクトリでは常にクリアする UNIX システムも存在します。新規に作成したディレクトリにはエントリが2つあります。自身のリンクである"."(ドット)および親ディレクトリのリンクである".."(ドットードット)です。 すべてのディレクトリは2つのディレクトリを含んでいます。.および..(ドット(dot)、ドット-ドット(dot-dot) と読みます)。ドットはディレクトリ自身を指し、ドット-ドットは親ディレクトリを指します。
ディレクトリを新たに作成すると2つのファイル名、(ドットと呼ぶ)「.」と(ドットドットと呼ぶ)「..」が自動的に作成されます。ドットはカレントディレクトリを、ドットドットは親ディレクトリを指します。ルートディレクトリでは、ドットドットはドットと同一です。 カレントディレクトリ(現在のディレクトリ)からの相対パス(Relative Path)で表すのが一般的です。ファイルシステムでは、カレントディレクトリは「.」、親ディレクトリは「..」で表現します。
なぜ表示されるかと言えばハードリンクとして実際に.や..という名前でディレクトリが存在しているからのようです。「inode」を確認すると、ディレクトリ名で指定した場合と.とで必ず一致しています(..も同様)。 親ディレクトリ/カレントディレクトリは、link_walk()の実装から、バーチャルなディレクトリかと思っていましたが、そうでなく、ハードリンクとして実ディレクトリとして作成されます。